-- -- ATENÇÃO:
--   ESTE SCRIPT NÃO SE APLICA AO TELLUS E AO PEGASUS

--Tabela SYNCHRONIZATION_ERROR não encontrada e deve ser criada.
CREATE OR REPLACE FUNCTION func_createTable() RETURNS void AS $$
DECLARE
    VCOUNT  INTEGER := 0;
BEGIN
  SELECT COUNT(pc.*) INTO VCOUNT FROM pg_class pc, pg_namespace pn WHERE pc.relname = 'synchronization_error' AND pc.relnamespace = pn.oid AND pn.nspname = '<SCHEMA>';

      IF VCOUNT = 0 THEN
          CREATE TABLE <SCHEMA>.SYNCHRONIZATION_ERROR (
	COD_ERRO_SYNC NUMERIC(20, 0) NOT NULL,
	ENTITY OID,
	ENTITY_CLASS VARCHAR(255) NOT NULL,
	MESSAGE TEXT,
	REMOTE_ID NUMERIC(20, 0) NOT NULL,
	SOURCE VARCHAR(32),
	TP_OPERATION NUMERIC(1, 0)
);
      END IF;
      RETURN;
END;

$$ LANGUAGE plpgsql;
SELECT func_createTable();
 DROP FUNCTION func_createTable();

--Chave primária PK_SYNCER não encontrada.
\echo 'Incluindo PK PK_SYNCER na Tabela SYNCHRONIZATION_ERROR'

CREATE OR REPLACE FUNCTION func_dropToCreatePrimeryKey() RETURNS void AS $$
DECLARE
    VCOUNT  INTEGER := 0;
BEGIN
  SELECT COUNT(*) INTO VCOUNT FROM pg_constraint WHERE conrelid='<SCHEMA>.synchronization_error'::REGCLASS AND conname= 'pk_syncer';

      IF VCOUNT = 1 THEN
          ALTER TABLE <SCHEMA>.SYNCHRONIZATION_ERROR DROP CONSTRAINT PK_SYNCER;
      END IF;
      RETURN;
END;

$$ LANGUAGE plpgsql;
SELECT func_dropToCreatePrimeryKey();
 DROP FUNCTION func_dropToCreatePrimeryKey();


ALTER TABLE <SCHEMA>.SYNCHRONIZATION_ERROR ADD CONSTRAINT PK_SYNCER PRIMARY KEY (COD_ERRO_SYNC);
--Comment não encontrado.
COMMENT ON TABLE <SCHEMA>.SYNCHRONIZATION_ERROR IS 'ARMAZENA INFORMACOES DA ENTIDADE, QUE DEVIDO A UM ERRO DE SINCRONIZACAO, NAO PODE SER SALVA NO SISTEMA';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.COD_ERRO_SYNC IS 'CODIGO DE IDENTIFICACAO DO ERRO';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.ENTITY IS 'ARMAZENA A REPRESENTACAO SERIALIZADA DA ENTIDADE QUE NAO PODE SER SALVA NO SISTEMA';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.ENTITY_CLASS IS 'ARMAZENA A CLASSE DA ENTIDADE NO SISTEMA DE ORIGEM';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.MESSAGE IS 'MENSAGEM DO ERRO DE SINCRONIZACAO';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.REMOTE_ID IS 'ARMAZENA O ID ORIGINAL DA ENTIDADE NO SISTEMA DE ORIGEM';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.SOURCE IS 'ARMAZENA O NOME DO SISTEMA DE ORIGEM DA ENTIDADE';
--Comment não encontrado.
COMMENT ON COLUMN <SCHEMA>.SYNCHRONIZATION_ERROR.TP_OPERATION IS 'INDICA A OPERACAO REALIZADA NO SISTEMA DE ORIGEM: INCLUSAO/ALTERACAO  (0), EXCLUSAO (1)';
--Check constraint CK_SYNCER_JT_0 não encontrado.
\echo 'Incluindo CK_SYNCER_JT_0 na Tabela SYNCHRONIZATION_ERROR'

CREATE OR REPLACE FUNCTION func_dropCheckConstraint() RETURNS void AS $$
DECLARE
    VCOUNT  INTEGER := 0;
BEGIN
  SELECT COUNT(*) INTO VCOUNT FROM pg_constraint WHERE conrelid='<SCHEMA>.synchronization_error'::REGCLASS AND conname= 'ck_syncer_jt_0';

      IF VCOUNT = 1 THEN
          ALTER TABLE <SCHEMA>.SYNCHRONIZATION_ERROR DROP CONSTRAINT CK_SYNCER_JT_0;
      END IF;
      RETURN;
END;

$$ LANGUAGE plpgsql;
SELECT func_dropCheckConstraint();
 DROP FUNCTION func_dropCheckConstraint();


ALTER TABLE <SCHEMA>.SYNCHRONIZATION_ERROR ADD CONSTRAINT CK_SYNCER_JT_0 CHECK ((TP_OPERATION = ANY (ARRAY[(0)::NUMERIC, (1)::NUMERIC])));

--Sequence SEQ_SYNCER está faltando.
\echo 'Incluindo Sequence SEQ_SYNCER'

CREATE OR REPLACE FUNCTION func_createSequence() RETURNS void AS $$
DECLARE
    VCOUNT  INTEGER := 0;
BEGIN
  SELECT COUNT(*) INTO VCOUNT FROM pg_statio_all_sequences WHERE relname = 'seq_syncer' and schemaname = '<SCHEMA>';

      IF VCOUNT = 0 THEN
          CREATE SEQUENCE <SCHEMA>.SEQ_SYNCER START WITH 100000;
      END IF;
      RETURN;
END;

$$ LANGUAGE plpgsql;
SELECT func_createSequence();
 DROP FUNCTION func_createSequence();


